package com.jokins.common.constant;

import java.util.HashMap;
import java.util.Map;

/**
 * 〈〉<br>
 *
 * @author Mr.Wang
 * @create 2025/2/11
 */
public enum LevelValueEnum {

    BODY("凡人境",200),
    BODY_REFINING_PERIOD("炼体期", 500),
    QI_REFINING_PERIOD("炼气期", 1000),
    FOUNDATION_ESTABLISHMENT_PERIOD("筑基期", 5000),
    GOLDEN_CORE_PERIOD("金丹期", 15000),
    INFANT_SOUL_PERIOD("元婴期", 25000),
    GOD_TRANSFORMATION_PERIOD("化神期", 50000),
    VOID_REFINING_PERIOD("炼虚期", 100000),
    UNIFICATION_PERIOD("合体期", 250000),
    GREAT_ASCENSION_PERIOD("大乘期", 500000),
    TRIBULATION_CROSSING_PERIOD("渡劫期", 999999);

    // 中文名称
    private final String level;
    // 升级所需等级数值
    private final int levelValueEnd;

    LevelValueEnum(String level, int levelValueEnd) {
        this.level = level;
        this.levelValueEnd = levelValueEnd;
    }

    /**
     * 获取等级的中文名称
     * @return 中文名称
     */
    public String getLevel() {
        return level;
    }

    /**
     * 获取升级所需的等级数值
     * @return 等级数值
     */
    public int getLevelValueEnd() {
        return levelValueEnd;
    }

    /**
     * 根据中文等级名称获取对应的枚举实例
     * @param level 中文等级名称
     * @return 对应的枚举实例，如果未找到则返回 null
     */
    public static LevelValueEnum getByLevel(String level) {
        for (LevelValueEnum value : values()) {
            if (value.level.equals(level)) {
                return value;
            }
        }
        return null;
    }

    /**
     * 根据传入的 level 获取对应的 levelValueEnd
     * @param level 中文等级名称
     * @return 对应的升级所需等级数值，如果未找到则返回 -1
     */
    public static int getLevelValueEndByLevel(String level) {
        LevelValueEnum levelValueEnum = getByLevel(level);
        return levelValueEnum != null ? levelValueEnum.getLevelValueEnd() : -1;
    }

    /**
     * 判断当前等级数值是否达到指定等级的升级要求
     * @param currentValue 当前等级数值
     * @param targetLevel 目标等级的中文名称
     * @return 如果达到升级要求返回 true，否则返回 false
     */
    public static boolean canUpgrade(int currentValue, String targetLevel) {
        LevelValueEnum target = getByLevel(targetLevel);
        if (target != null) {
            return currentValue >= target.getLevelValueEnd();
        }
        return false;
    }

    /**
     * 根据传入的 level 获取下一级的中文名称
     * @param currentLevel 当前等级的中文名称
     * @return 下一级的中文名称，如果已经是最高等级则返回 null
     */
    public static Map<String,Object> getNextLevel(String currentLevel) {
        LevelValueEnum current = getByLevel(currentLevel);
        Map map=new HashMap<>();
        if (current == null) {
            return null;
        }
        LevelValueEnum[] values = values();
        for (int i = 0; i < values.length - 1; i++) {
            if (values[i] == current) {
                map.put("level",values[i + 1].getLevel());
                map.put("levelValueEnd",getLevelValueEndByLevel(values[i + 1].getLevel()));
                return map;
            }
        }
        return null;
    }

    public static void main(String[] args) {
        System.out.println(canUpgrade(280,"凡人境"));
        System.out.println(getNextLevel("凡人境"));
    }
}